<?php

include_once 'CtlGeneral.php';
include_once '../entities/Inscripcion.php';
include_once '../entities/Grupo.php';

include_once '../boundaries/gestionarInscripciones/BoundFormularioInscripcion.php';

class CtlInscripcion extends CtlGeneral {
    
    public function __construct($param, $files) {
        
        switch ($param['opc']) {
            
            case 'menuPrinc': echo $this->insertarTitulo("Gestionar inscripciones");
                    
                echo "<br><input type='button' id='regis' name='regis' value='Registrar Inscripción' onclick=\"ajax('controllers/CtlInscripcion.php', 'frmRegisInscrip1', 'vacio', 'contenido')\">";
                
                        echo $this->listarAlumnos("GI");
                break;
            
            case 'frmDetallesInscrip': $inscrip = new Inscripcion(); $inscrip = $inscrip->obtenerPorId($param['id']);
                                    $this->mostrarBoundFormulario("D", $inscrip, $inscrip['inidgrupo'], $inscrip['inidalumno'], null);
                break;
            
            case 'frmRegisInscrip1': echo $this->insertarTitulo("Seleccione el grupo");
                                    echo '<br><input type="button" value="Regresar" 
                                            onclick="ajax(\'controllers/CtlInscripcion.php\', \'menuPrinc\', \'vacio\', \'contenido\')"/>';
                                    echo $this->listarGrupos("GI");
                break;
                                
            case 'frmRegisInscrip2': echo $this->insertarTitulo("Seleccione un alumno para inscribirlo");
                                
                                echo '<br><input type="button" value="Regresar" 
                                   onclick="ajax(\'controllers/CtlInscripcion.php\', \'frmRegisInscrip1\', \'vacio\', \'contenido\')"/>';
                
                                echo "<form id='frmInscr'>
                                        <input type='hidden' value='$param[id]' name='idGrupo' id='idGrupo'>
                                    </form>";
                                //Aqui se asigna al atributo, de la clase padre (CtlGeneral), idGrupo 
                                $this->idGrupo = $param['id'];
                                echo $this->listarAlumnos("GIR");
                break;
            
            case 'frmRegisInscrip3': $this->mostrarBoundFormulario("R", null, $param['idGrupo'], $param['id'], null);
                break;
            
            case 'cargarArchivo': $this->menuCargaImagen($param['tipo'], $param['claseArchivo'], $param['idAlumno'], $param['idGrupo']);
                break;
            
            case 'subirArchivo': $this->cargarArchivo($param['claseArchivo'], $param['idAlumno'], $param['idGrupo'], $files);
                break;
            
            case 'regisInscrip': $inscrip = $this->regisInscripcion($param);
                                if ($inscrip != false) {
                                    $this->mostrarBoundFormulario("D", $inscrip, $inscrip['inidgrupo'], $inscrip['inidalumno'], null);
                                } else if ($inscrip != "") {
                                    echo $this->insertarTitulo("Ocurrio un error al registrar la inscripción");
                                }
                break;
                
            case 'devolPago': echo $this->insertarTitulo("Subir hoja de motivos de devolución de pago");
                                echo "<br><input type=\"button\" value=\"Regresar\" 
                                            onclick=\"ajaxConId('controllers/CtlInscripcion.php', 'frmDetallesInscrip', 'vacio', 'contenido', $param[id])\"/><table><tr><td>
                                        <iframe scrolling=\"no\" height=\"45\" 
                                            src=\"controllers/CtlInscripcion.php?opc=cargarArchivo&idGrupo=$param[idGrupo]&idAlumno=$param[idAlumno]&tipo=A&claseArchivo=DP\" >
                                        </iframe></td></tr></table>";
                break;
            
            default : echo 'NADA!!!';
        }
    }
    
    public function regisInscripcion ($param){
        
        //Arreglo que almacena los errores del registro
        $arregErrores = "";
        //Bandera para saber si hay un erro al insertar
        $conError = false;
        
        $inscrip = new Inscripcion();
        
        $inscrip->iniTransaccion();
        
        //Determinamos si hay motivo, en caso contrario inicializamos la variable
        $param['motivo'] = ( isset($param['motivo']) ? $param['motivo'] : '' );
        $inscrTemp['inmotivo'] = ( isset($param['motivo']) ? $param['motivo'] : '' );

        //Obtenemos el nombre del la constancia de la UNAM, para verificar si se ha subido en caso de haberla marcado
        if ($param['unamPublico'] == 'U' ) {
            
            $inscrTemp['indirconstaafili'] = "U";
            
            $nomConsUNAM = $this->encontrarFile($this->generarNombresClaves($param['idAlumno'], $param['idGrupo']), $param['unamPublico']);
            
            if ($nomConsUNAM == false) {
                $conError = true;
                
                $arregErrores['consUNAM'] = "<etiqueta class='error'>Subir constancia</etiqueta>";
            }
        } else {
            $nomConsUNAM = '';
            $inscrTemp['indirconstaafili'] = "";
        }
        //Verificamos si se ha súbido la identificación oficial
        $idenOfic = $this->encontrarFile($this->generarNombresClaves($param['idAlumno'], $param['idGrupo']), 'I');
        if ($idenOfic == false) {
            $conError = true;
            
            $arregErrores['idenOfic'] = "<etiqueta class='error'>Subir identificación</etiqueta>";
        }
        
        //Obtenemos el nombre del la comprobante de pago o carta compromiso, para verificar si se ha subido la que ha sido marcada
        $nomComproPago = $this->encontrarFile($this->generarNombresClaves($param['idAlumno'], $param['idGrupo']), $param['pagoCarta']);
        
        $inscrTemp[($param['pagoCarta'] == 'P' ? 'indircompropago' : 'indircartacompro' )] = ($param['pagoCarta'] == 'P' ? "P" : "C");

        if ($nomComproPago == false) {
            $conError = true;

            $arregErrores['pagoCarta'] = "<etiqueta class='error'>". ($param['pagoCarta'] == 'P' ? "Subir pago" : "Subir carta") ."</etiqueta>";
        }
        
        //Si se encontro un error cancelamos el registro y mandamos los errores
        if ($conError) {
            
            $this->mostrarBoundFormulario('R', $inscrTemp, $param['idAlumno'], $param['idGrupo'], $arregErrores);
            return "";
            
        } else {
            
            $grupo = new Grupo();
            $grupo = $grupo->obtenerPorId($param['idGrupo']);
            
            $nuevaInscripcion = $inscrip->registrar($param['idAlumno'], $param['idGrupo'], $param['motivo'], $nomConsUNAM, $idenOfic, ($param['pagoCarta'] == 'P' ? $nomComproPago : ''), 
                                    ($param['pagoCarta'] == 'P' ? '' : $nomComproPago), ($param['unamPublico'] == 'U' ? 'I' : 'E'), ($param['unamPublico'] == 'U' ? ($grupo['grprecio'] * 0.5) : $grupo['grprecio']));
            
            if ($nuevaInscripcion != false) {
                $inscrip->finTransaccion();
                
                $this->verificarParaSubirNivelDeGrupo($param['idGrupo']);
                
                return $nuevaInscripcion;
            } else {
                $inscrip->rollback();
                
                return false;
            }
        }
    }

    private function menuCargaImagen ($tipoMenu, $claseArchivo, $idAlumno, $idGrupo) {
        
        $nameFile = ( $tipoMenu == 'M' ? false : $this->encontrarFile($this->generarNombresClaves($idAlumno, $idGrupo), $claseArchivo) );
        
        if ($nameFile == false || $tipoMenu == 'M') {
            echo "<body style='margin-top: 0px; margin-bottom: 0px;'>
                    <form action='CtlInscripcion.php' method='post' enctype='multipart/form-data' name='file' id='file' target='_self'>
                        <input type='hidden' name='opc' value='subirArchivo' />
                        <input type='hidden' name='claseArchivo' value='". ($claseArchivo == "U" ? "U" : ($claseArchivo == "P" ? "P" : ($claseArchivo == "I" ? "I" : ($claseArchivo == "C" ? "C" : "DP"))) ) ."' />
                        <input type='hidden' name='idAlumno' value='$idAlumno' />
                        <input type='hidden' name='idGrupo' value='$idGrupo' />
                        <input type='file' name='file' /><input type='submit' value='Subir archivo'>
                    </form>
                </body>";
        } else {
            
            echo "<body style='margin-top: 0px; margin-bottom: 0px;'>";
            
            echo "<a href='../docs/". ($claseArchivo == "U" ? "constaUNAM" : ($claseArchivo == "P" ? "pagosInscrp" : ($claseArchivo == "C" ? "cartasCompro" : ($claseArchivo == "I" ? "identiOfici" : "devolPagos"))) )
                    ."/$nameFile' target='_blank' >
                    Descargar ". ($claseArchivo == "U" ? "constancia UNAM" : ($claseArchivo == "P" ? "hoja de pago" : ($claseArchivo == "I" ? "identificiación" : ($claseArchivo == "C" ? "carta compromiso" : "motivos de devolución"))) ) ."
                    </a><br>";
            
            if ($claseArchivo != 'DP') 
                echo "<a href='CtlInscripcion.php?opc=cargarArchivo&idGrupo=$idGrupo&idAlumno=$idAlumno&tipo=M&claseArchivo=". ($claseArchivo == "U" ? "U" : ($claseArchivo == "P" ? "P" : ($claseArchivo == "I" ? "I" : "C")) ) 
                                                                    ."'>Cambiar archivo</a></body>";
        }
    }

    private function cargarArchivo($claseArchivo, $idAlumno, $idGrupo, $file) {
        
        //Definimos el tipo de archivo permitido
        $extenPermi = array("pdf", "jpeg", "jpg", "png");
        $temp = explode(".", $file["file"]["name"]);
        $exten = end($temp);
        
        //Si no se subio archivo
        if ($file["file"]["name"] == "") {
            
            echo "Debes seleccionar un archivo<br><a href='CtlInscripcion.php?opc=cargarArchivo&idGrupo=$idGrupo&idAlumno=$idAlumno&tipo=M&claseArchivo=". ($claseArchivo == "U" ? "U" : ($claseArchivo == "P" ? "P" : ($claseArchivo == "I" ? "I" : ($claseArchivo == "C" ? "C" : "DP"))) ) 
                                                                    ."'>Volver a intentar</a>";
            
        //Si el archivo es de un formato no permitido
        } else if (!in_array($exten, $extenPermi)) { 
            
            echo "Archivo no permitido<br><a href='CtlInscripcion.php?opc=cargarArchivo&idGrupo=$idGrupo&idAlumno=$idAlumno&tipo=M&claseArchivo=". ($claseArchivo == "U" ? "U" : ($claseArchivo == "P" ? "P" : ($claseArchivo == "I" ? "I" : ($claseArchivo == "C" ? "C" : "DP"))) ) 
                                                                    ."'>Volver a intentar</a>";
        } else {

            $destino = "../docs/". ($claseArchivo == "U" ? "constaUNAM" : ($claseArchivo == "P" ? "pagosInscrp" : ($claseArchivo == "C" ? "cartasCompro" : ($claseArchivo == "I" ? "identiOfici" : "devolPagos")))) ."/". $this->generarNombresClaves($idAlumno, $idGrupo) . "." . $exten;

            if (move_uploaded_file($file['file']['tmp_name'], $destino)) {
                
                $this->menuCargaImagen('A', $claseArchivo, $idAlumno, $idGrupo);
            } else {
                echo "Archivo no cargado<br><a href='CtlInscripcion.php?opc=cargarArchivo&idGrupo=$idGrupo&idAlumno=$idAlumno
                                                    &tipo=M&claseArchivo=". ($claseArchivo == "U" ? "U" : ($claseArchivo == "P" ? "P" : ($claseArchivo == "I" ? "I" : ($claseArchivo == "C" ? "C" : "DP"))) ) 
                                                                    ."'>Volver a intentar</a>";
            }            
        }
    }
    
    public function mostrarBoundFormulario ($tipo, $inscripcion, $idGrupo, $idAlumno, $errores) {
        
        if ($tipo == 'R') {
            new BoundFormularioInscripcion($tipo, $inscripcion, $idAlumno, $idGrupo, $errores);
        } else {
            
            new BoundFormularioInscripcion($tipo, $inscripcion, $idAlumno, $idGrupo, $errores);
        }
    }
}

new CtlInscripcion(( isset($_POST['opc']) ? $_POST : $_GET ), $_FILES);
?>